/**
 *  监听者
 *  <li>    用于聆听某种状态，针对于某个事物的变换 -> 事件则只是单纯的描述发生了什么，这里会回调发生了什么，注册的时候会返回当前的状态
 *  <li>    只对某个数据感兴趣， 比如说 我只对用户的登录情况感兴趣 对其他不敢兴趣
 *
 *  <li>    使用Map<String,Object> 的方式进行保存，可以通过String的方式直接卸载
 */

class Listener{
    constructor(state){
        this.state = state;
        this.watcher = new Map();
    }

    register(name,watch){
        if(watch == null || watch.notice == null){
            return this;
        }

        if(this.watcher.delete(name)){
            console.log("name = "+name+"    已经注册，覆盖");
        }
        this.watcher.set(name,watch);
        if(watch.notice){
            watch.notice(this.state);
        }
        return this;
    }

    unregister(name){
        this.watcher.delete(name);
        return this;
    }

    publish(state){
        this.state = state;
        let that = this;
        this.watcher.forEach((v,k) => {
            v.notice(that.state)
        })
    }
}

export default Listener;